package com.sicheng.lc.周赛.分类.栈;

/**
 * @author zsc
 * @version 1.0
 * @date 2022/6/28 11:27
 */
public class K次操作后最大化顶端元素 {
    //https://leetcode.cn/problems/maximize-the-topmost-element-after-k-moves/
    public int maximumTop(int[] nums, int k) {
        if (k == 0)
            return nums[0];
        // 边界条件, k很大，但是原数组只有一个元素时，
        // 把元素所有元素删掉剩下的操作次数是偶数，那么无论如何都没法把那个删了的元素补回去
        // 还有一个边界就是 k, nums.length==1
        if (nums.length == 1 && (k - nums.length & 1) == 0)
            return -1;

        int max = -1;

        if (k <= nums.length) {
            // k较小时
            // 在nums里截取一段长k的子数组
            // 结果是 前k-1个里面最大的 max(nums[0,k-2]) 和 nums[k] 的最大值
            //nums[k-1]即使是最大的也取不到
            //{1,2,3,4,8,6} ,k=5
            //要么删掉前五个元素得到6, 要么取前四了里面最大的4。结果是6
            //显然是无法得到8的,操作次数不够
            for (int i = 0; i < k - 1; i++) {
                max = Math.max(max, nums[i]);
            }
            if (k < nums.length)
                return Math.max(nums[k], max);
            return max;
        }

        //当k较大时 直接取数组里最大值即可
        for (int num : nums) {
            max = Math.max(max, num);
        }
        return max;
    }
}
